package test;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/*
代码解释：

该代码中的主函数使用了Scanner类从控制台读取输入，
分别读入两个字符串s和t。然后调用isIsomorphic函数判断这两个字符串是否同构，并将判断结果输出到控制台。

isIsomorphic函数实现了判断两个字符串是否同构的功能。如果两个字符串长度不同，则肯定不是同构的，直接返回false。
否则，使用一个HashMap来记录s中的字符和其对应的t中的字符。遍历s中的每个字符，对于每个字符，
如果在HashMap中已经有对应的字符了，但对应字符不是当前正在遍历的字符，说明s和t不是同构的，直接返回false。
否则，将该字符和其对应的字符加入HashMap中。如果遍历完成后都没有返回false，则说明s和t是同构的，返回true。

注意，在判断t中当前字符对应的字符在map中已经有值了时，还需要判断该值是否对应s中的字符，
否则会导致有多个s中的字符对应同一个t中的字符，从而违反了同构的定义。
 */
public class 同构 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        String t = scanner.next();

        System.out.println(isIsomorphic(s, t));
    }

    private static boolean isIsomorphic(String s, String t) {
        // 如果两个字符串长度不同，肯定不是同构的
        if (s.length() != t.length()) {
            return false;
        }

        Map<Character, Character> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            char c1 = s.charAt(i);
            char c2 = t.charAt(i);

            // 如果s中当前字符对应的字符在map中已经有值了，但该值不是t中对应的字符，
            // 则说明s和t不是同构的
            if (map.containsKey(c1) && map.get(c1) != c2) {
                return false;
            }

            // 如果t中当前字符对应的字符在map中已经有值了，但该值不是s中对应的字符，
            // 则说明s和t不是同构的
            if (map.containsValue(c2) && !map.containsKey(c1)) {
                return false;
            }

            map.put(c1, c2);
        }

        return true;
    }
}

